<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //1、函数参数默认值

        //在 ES6 以前，我们无法给一个函数参数设置默认值，只能采用变通写法：
        function oldAdd(a,b){
            // 判断 b 是否为空，为空就给默认值 1 
            b = b || 1; 
            return a + b;
        }
        //传一个参数
        console.log(oldAdd(10));//11

        //现在可以这么写：直接给参数写上默认值，没传就会自动使用默认值
        function newAdd(a,b = 1){
            return a + b;
        }
        //传一个参数
        console.log(newAdd(10));//11


        //2、不定参数
        //不定参数用来表示不确定参数个数，形如，...变量名，由...加上一个具名参数标识符组成。 
        //具名参数只能放在参数列表的最后，并且有且只有一个不定参数
        function undefinedParam(...values){
            return values.length;
        }
        console.log(undefinedParam(1,2,3));//3
        console.log(undefinedParam(1));//1

        //3、箭头函数
        //之前定义函数 ：
        var print1 = function(obj){
            console.log(obj);
        }
        //使用箭头函数定义：
        var print2 = obj => console.log(obj);
        //测试调用
        print1(1);//1
        print2(2);//2

        //多参数
        var sum = function(a,b){
            return a+b;
        }
        var sum2 = (a,b) => a+b;
        console.log(sum(10,20));//30
        console.log(sum2(10,20));//30

        //多行方法
        var sum3 = (a,b) => {
            c = a+b;
            return c;
        };
        console.log(sum3(10,20));//30

        //4、箭头函数结合解构表达式
        const person = {
            "name":"解构表达式",
            "age":9999,
            "language":['java','python','js','css']
        }
        var per1 = function personFun(person){
            console.log("hello"+person.name);
        }
        var per2 = ({name}) => console.log("hello"+name);
        per1(person);
        per2(person);
    </script>
</body>
</html>